#!/usr/bin/python3
"""
题目：https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
    整数数组 nums 按升序排列，数组中的值 互不相同 。
    在传递给函数之前，nums 在预先未知的某个下标 k（0 <= k < nums.length）上进行了 旋转，使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]（下标 从 0 开始 计数）。例如， [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
    给你 旋转后 的数组 nums 和一个整数 target ，如果 nums 中存在这个目标值 target ，则返回它的下标，否则返回 -1 。

    示例 1：
    输入：nums = [4,5,6,7,0,1,2], target = 0
    输出：4
思路：先找到下标k,然后查找target是否存在[0,k]和[k+1,n]中，如果存在则返回，否则返回-1
时间复杂度：O(n)
空间复杂度：O(1)
"""
from typing import List

class Solution:

    def hasTarget(self, nums: List[int], left: int, right: int, target: int):
        while left <= right:
            pivot = (left + right) // 2
            if nums[pivot] < target:
                left += 1
            elif nums[pivot] > target:
                right -= 1
            else:
                # print('pivot:{}'.format(pivot))
                return pivot
        return -1

    def search(self, nums: List[int], target: int) -> int:
        n = len(nums)
        pivot = 0
        for i in range(1, n):
            if nums[i] < nums[i - 1]:
                pivot = i - 1
        left = self.hasTarget(nums, 0, pivot, target)
        right = self.hasTarget(nums, pivot + 1, n - 1, target)
        return max(left, right)


t = Solution()
list = [4, 5, 6, 7, 0, 1, 2]
print(t.search(list, 0))
